package com.wenx.v3system.modular.cloud.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.wenx.base.rest.BaseRestService;
import com.wenx.v3system.modular.cloud.domain.po.SysPermissionCondition;
import com.wenx.v3system.modular.cloud.domain.query.SysPermissionConditionQuery;
import com.wenx.v3system.modular.cloud.domain.dto.SysPermissionConditionDto;

import java.util.List;

/**
 * 系统权限条件RestService接口
 * 继承BaseRestService以支持标准化CRUD操作
 * 
 * @author wenx
 * @since 1.0.0
 */
public interface SysPermissionConditionRestService extends IService<SysPermissionCondition>, BaseRestService<SysPermissionConditionDto, SysPermissionConditionQuery> {

    /**
     * 根据权限ID获取权限条件列表（业务层使用）
     * 
     * @param permissionId 权限ID
     * @return 权限条件DTO列表
     */
    List<SysPermissionConditionDto> getByPermissionIdAsDto(Long permissionId);
    
    /**
     * 根据表名获取权限条件列表（业务层使用）
     * 
     * @param tableName 表名
     * @return 权限条件DTO列表
     */
    List<SysPermissionConditionDto> getByTableNameAsDto(String tableName);

    /**
     * 根据权限ID删除权限条件
     * 
     * @param permissionId 权限ID
     */
    void deleteByPermissionId(Long permissionId);

    /**
     * 批量更新权限条件排序
     * 
     * @param conditionIds 条件ID列表
     */
    void batchUpdateSort(List<Long> conditionIds);

    /**
     * 验证权限条件是否满足
     * 
     * @param permissionId 权限ID
     * @param context 上下文信息
     * @return 是否满足条件
     */
    boolean validateConditions(Long permissionId, Object context);

    /**
     * 检查字段和操作符组合是否已存在
     * 
     * @param permissionId 权限ID
     * @param field 字段名
     * @param operator 操作符
     * @param excludeId 排除的ID
     * @return 是否存在
     */
    boolean existsByFieldAndOperator(Long permissionId, String field, String operator, Long excludeId);

    /**
     * 根据表名获取权限条件（从缓存）
     *
     * @param tableName 表名
     * @return 权限条件列表
     */
    List<SysPermissionCondition> getByTableName(String tableName);
    /**
     * 根据权限ID获取权限条件（从缓存）
     *
     * @param permissionId 权限ID
     * @return 权限条件列表
     */
    List<SysPermissionCondition> getByPermissionId(Long permissionId);

    /**
     * 刷新指定表的权限条件缓存
     *
     * @param tableName 表名
     */
    void refreshTableCache(String tableName);

    /**
     * 刷新指定权限的条件缓存
     *
     * @param permissionId 权限ID
     */
    void refreshPermissionCache(Long permissionId);

    /**
     * 刷新所有权限条件缓存
     */
    void refreshAllCache();

    /**
     * 预加载所有权限条件到缓存
     */
    void preloadCache();}